﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace Tworzenie_Grafiku
{
    /// <summary>
    /// Interaction logic for KsiegaPiR.xaml
    /// </summary>
    public partial class KsiegaPiR : Window
    {
        List<String> miesiace = new List<String>();
        List<String> lata = new List<String>();
        private string id_uzytkownika;
        private string imie_uzytkownika;
        private string nazwisko_uzytkownika;
        private string stanowisko_uzytkownika;

        List<DokumentSprzedazy> sprzedaz = new List<DokumentSprzedazy>();
        List<DokumentKosztow> koszty = new List<DokumentKosztow>();
        List<DokumentInny> innedok = new List<DokumentInny>();

        public List<KsiegaMiesiac> polamies { get; set; }

        public List<KsiegaRok> polarok { get; set; }

        public KsiegaPiR(string id_uzytkownika, string imie_uzytkownika, string nazwisko_uzytkownika, string stanowisko_uzytkownika)
        {
            InitializeComponent();
            this.id_uzytkownika = id_uzytkownika;
            this.imie_uzytkownika = imie_uzytkownika;
            this.nazwisko_uzytkownika = nazwisko_uzytkownika;
            this.stanowisko_uzytkownika = stanowisko_uzytkownika;
            polarok = new List<KsiegaRok>();
            polamies = new List<KsiegaMiesiac>();
            miesiace.Add("Styczeń");
            miesiace.Add("Luty");
            miesiace.Add("Marzec");
            miesiace.Add("Kwiecień");
            miesiace.Add("Maj");
            miesiace.Add("Czerwiec");
            miesiace.Add("Lipiec");
            miesiace.Add("Sierpień");
            miesiace.Add("Wrzesień");
            miesiace.Add("Październik");
            miesiace.Add("Listopad");
            miesiace.Add("Grudzień");
            miesiac.ItemsSource = miesiace;
            lata.Add("2013");
            lata.Add("2014");
            rok.ItemsSource = lata;
            checkBox1.Checked += new RoutedEventHandler(checkBox1_Checked);
            checkBox2.Checked += new RoutedEventHandler(checkBox2_Checked);
        }

        private void checkBox1_Checked(object sender, RoutedEventArgs e)
        {
            ksiegamiesieczna.Visibility = Visibility.Visible;
            ksiegaroczna.Visibility = Visibility.Hidden;
            miesiac.IsEnabled = true;
            checkBox2.IsChecked = false;
        }

        private void checkBox2_Checked(object sender, RoutedEventArgs e)
        {
            ksiegaroczna.Visibility = Visibility.Visible;
            ksiegamiesieczna.Visibility = Visibility.Hidden;
            miesiac.IsEnabled = false;
            checkBox1.IsChecked = false;
        }

        private void Pokaz_Click(object sender, RoutedEventArgs e)
        {
            ksiegamiesieczna.ItemsSource = null;
            ksiegaroczna.ItemsSource = null;
            sprzedaz.Clear();
            koszty.Clear();
            innedok.Clear();
            polamies.Clear();
            polarok.Clear();
            if (checkBox1.IsChecked == true)
            {
                String mies = Convert.ToString(miesiac.SelectedIndex+1);
                String r = lata[rok.SelectedIndex];
                if (mies.Length == 1)
                    mies = "0" + mies;
                String data1 = r+"-"+mies+"-"+"01";
                String data2 = r+"-"+mies+"-"+"31";
                using (LINQtoDBDataContext db = new LINQtoDBDataContext())
                {
                    var records1 = from record in db.DokumentSprzedazies
                                  where Convert.ToDateTime(record.Data) >= Convert.ToDateTime(data1) && Convert.ToDateTime(record.Data) <= Convert.ToDateTime(data2)
                                  select record;
                    sprzedaz = records1.ToList();
                    var records2 = from record in db.DokumentKosztows
                                  where Convert.ToDateTime(record.Data) >= Convert.ToDateTime(data1) && Convert.ToDateTime(record.Data) <= Convert.ToDateTime(data2)
                                  select record;
                    koszty = records2.ToList();
                    var records3 = from record in db.DokumentInnies
                                   where Convert.ToDateTime(record.Data) >= Convert.ToDateTime(data1) && Convert.ToDateTime(record.Data) <= Convert.ToDateTime(data2)
                                   select record;
                    innedok = records3.ToList();
                }
                double r1 = 0, r2 = 0, r3 = 0, r4 = 0, r5 = 0, r6 = 0, r7 = 0, r8 = 0;
                int lp = 1;
                for (int i = 0; i < 31; i++)
                {
                    for (int j = 0; j < sprzedaz.Count; j++)
                    {
                        String[] data = sprzedaz[j].Data.Split('-');
                        if (i + 1 == Convert.ToInt32(data[2]))
                        {
                            polamies.Add(new KsiegaMiesiac(Convert.ToString(lp)+".", sprzedaz[j].Data, sprzedaz[j].Numer_faktury, "0,0", "0,0", "0,0", "0,0", "0,0", "0,0", "0,0", "0,0"));
                            List<Usługa> uslugi = new List<Usługa>();
                            using (LINQtoDBDataContext db = new LINQtoDBDataContext())
                            {
                                var records = from record in db.Usługas
                                              where sprzedaz[j].Numer_faktury.Contains(record.DokumentSprzedazy.Numer_faktury)
                                              select record;
                                uslugi = records.ToList();
                            }
                            double suma = 0;
                            for (int k = 0; k < uslugi.Count; k++)
                            {
                                suma += Convert.ToDouble(uslugi[k].Cena_netto) * Convert.ToInt32(uslugi[k].Ilosc);
                            }
                            polamies[polamies.Count - 1].Sprz_usl = Convert.ToString(suma);
                            polamies[polamies.Count - 1].Prz_raz = Convert.ToString(suma);
                            r1 += suma;
                            r3 += suma;
                            lp++;
                        }
                    }
                    for (int j = 0; j < koszty.Count; j++)
                    {
                        String[] data = koszty[j].Data.Split('-');
                        if (i + 1 == Convert.ToInt32(data[2]))
                        {
                            polamies.Add(new KsiegaMiesiac(Convert.ToString(lp) + ".", koszty[j].Data, koszty[j].Numer_faktury, "0,0", "0,0", "0,0", "0,0", "0,0", "0,0", "0,0", "0,0"));
                            List<Material> materialy = new List<Material>();
                            using (LINQtoDBDataContext db = new LINQtoDBDataContext())
                            {
                                var records = from record in db.Materials
                                              where koszty[j].Numer_faktury.Contains(record.DokumentKosztow.Numer_faktury)
                                              select record;
                                materialy = records.ToList();
                            }
                            double suma = 0;
                            for (int k = 0; k < materialy.Count; k++)
                            {
                                suma += Convert.ToInt32(materialy[k].Ilosc) * (Convert.ToDouble(materialy[k].Cena_netto) + Convert.ToDouble(materialy[k].Cena_netto) * (Convert.ToInt32(materialy[k].Vat) * 0.01));
                            }
                            polamies[polamies.Count - 1].Zak_mat = Convert.ToString(suma);
                            polamies[polamies.Count - 1].Kosz_raz = Convert.ToString(suma);
                            r4 += suma;
                            r8 += suma;
                            lp++;
                        }
                    }
                    for (int j = 0; j < koszty.Count; j++)
                    {
                        String[] data = koszty[j].Data.Split('-');
                        if (i + 1 == Convert.ToInt32(data[2]))
                        {
                            polamies.Add(new KsiegaMiesiac(Convert.ToString(lp) + ".", innedok[j].Data, innedok[j].Opis, "0,0", "0,0", "0,0", "0,0", "0,0", "0,0", "0,0", "0,0"));
                            List<KosztInny> inne = new List<KosztInny>();
                            using (LINQtoDBDataContext db = new LINQtoDBDataContext())
                            {
                                var records = from record in db.KosztInnies
                                              where Convert.ToString(innedok[j].Id_dokumentu).Contains(Convert.ToString(record.DokumentInny.Id_dokumentu))
                                              select record;
                                inne = records.ToList();
                            }
                            for (int k = 0; k < inne.Count; k++)
                            {
                                if (inne[k].Typ.CompareTo("Sprzedane usługi") == 0)
                                {
                                    polamies[polamies.Count - 1].Sprz_usl = inne[k].Kwota;
                                    r1 += Convert.ToDouble(inne[k].Kwota);
                                }
                                if (inne[k].Typ.CompareTo("Pozostałe przychody") == 0)
                                {
                                    polarok[polamies.Count - 1].Poz_prz = inne[k].Kwota;
                                    r2 += Convert.ToDouble(inne[k].Kwota);
                                }
                                if (inne[k].Typ.CompareTo("Zakup materiałów") == 0)
                                {
                                    polarok[polamies.Count - 1].Zak_mat = inne[k].Kwota;
                                    r4 += Convert.ToDouble(inne[k].Kwota);
                                }
                                if (inne[k].Typ.CompareTo("Koszty uboczne") == 0)
                                {
                                    polarok[polamies.Count - 1].Kosz_ub = inne[k].Kwota;
                                    r5 += Convert.ToDouble(inne[k].Kwota);
                                }
                                if (inne[k].Typ.CompareTo("Koszty wynagrodzenia") == 0)
                                {
                                    polarok[polamies.Count - 1].Kosz_wyn = inne[k].Kwota;
                                    r6 += Convert.ToDouble(inne[k].Kwota);
                                }
                                if (inne[k].Typ.CompareTo("Pozostałe wydatki") == 0)
                                {
                                    polarok[polamies.Count - 1].Poz_wyd = inne[k].Kwota;
                                    r7 += Convert.ToDouble(inne[k].Kwota);
                                }
                            }
                            polarok[polamies.Count - 1].Prz_raz = Convert.ToString(Convert.ToDouble(polamies[polamies.Count - 1].Sprz_usl) + Convert.ToDouble(polarok[polamies.Count - 1].Poz_prz));
                            polarok[polamies.Count - 1].Kosz_raz = Convert.ToString(Convert.ToDouble(polarok[polamies.Count - 1].Zak_mat) + Convert.ToDouble(polarok[polamies.Count - 1].Kosz_ub) + Convert.ToDouble(polarok[polamies.Count - 1].Kosz_wyn) + Convert.ToDouble(polarok[polamies.Count - 1].Poz_wyd));
                            r3 += Convert.ToDouble(polarok[polamies.Count - 1].Prz_raz);
                            r8 += Convert.ToDouble(polarok[polamies.Count - 1].Kosz_raz);
                            lp++;
                        }
                    }
                }
                ksiegamiesieczna.ItemsSource = polamies;
                sprz_usl.Text = Convert.ToString(r1);
                poz_prz.Text = Convert.ToString(r2);
                prz_razem.Text = Convert.ToString(r3);
                zak_mat.Text = Convert.ToString(r4);
                koszt_ub.Text = Convert.ToString(r5);
                koszt_wyn.Text = Convert.ToString(r6);
                poz_wyd.Text = Convert.ToString(r7);
                koszt_razem.Text = Convert.ToString(r8);
            }
            else if (checkBox2.IsChecked == true)
            {
                String r = lata[rok.SelectedIndex];
                String data1 = r + "-01-" + "01";
                String data2 = r + "-12-" + "31";
                using (LINQtoDBDataContext db = new LINQtoDBDataContext())
                {
                    var records1 = from record in db.DokumentSprzedazies
                                   where Convert.ToDateTime(record.Data) >= Convert.ToDateTime(data1) && Convert.ToDateTime(record.Data) <= Convert.ToDateTime(data2)
                                   select record;
                    sprzedaz = records1.ToList();
                    var records2 = from record in db.DokumentKosztows
                                   where Convert.ToDateTime(record.Data) >= Convert.ToDateTime(data1) && Convert.ToDateTime(record.Data) <= Convert.ToDateTime(data2)
                                   select record;
                    koszty = records2.ToList();
                    var records3 = from record in db.DokumentInnies
                                   where Convert.ToDateTime(record.Data) >= Convert.ToDateTime(data1) && Convert.ToDateTime(record.Data) <= Convert.ToDateTime(data2)
                                   select record;
                    innedok = records3.ToList();
                }
                double r1 = 0, r2 = 0, r3 = 0, r4 = 0, r5 = 0, r6 = 0, r7 = 0, r8 = 0;
                for (int i = 0; i < 12; i++)
                {
                    polarok.Add(new KsiegaRok("", "0,0", "0,0", "0,0", "0,0", "0,0", "0,0", "0,0", "0,0"));
                    polarok[i].Mies = miesiace[i];
                    for (int j = 0; j < sprzedaz.Count; j++)
                    {
                        String[] data = sprzedaz[j].Data.Split('-');
                        if (i + 1 == Convert.ToInt32(data[1]))
                        {
                            List<Usługa> uslugi = new List<Usługa>();
                            using (LINQtoDBDataContext db = new LINQtoDBDataContext())
                            {
                                var records = from record in db.Usługas
                                              where sprzedaz[j].Numer_faktury==record.DokumentSprzedazy.Numer_faktury
                                              select record;
                               
                                uslugi = records.ToList();
                            }
                            double suma = 0;
                            for (int k = 0; k < uslugi.Count; k++)
                            {
                                suma += Convert.ToDouble(uslugi[k].Cena_netto) * Convert.ToInt32(uslugi[k].Ilosc);
                            }
                            polarok[i].Sprz_usl = Convert.ToString(Convert.ToDouble(polarok[i].Sprz_usl) + suma);
                        }
                    }
                    for (int j = 0; j < koszty.Count; j++)
                    {
                        String[] data = koszty[j].Data.Split('-');
                        if (i + 1 == Convert.ToInt32(data[1]))
                        {
                            List<Material> materialy = new List<Material>();
                            using (LINQtoDBDataContext db = new LINQtoDBDataContext())
                            {
                                var records = from record in db.Materials
                                              where koszty[j].Numer_faktury.Contains(record.DokumentKosztow.Numer_faktury)
                                              select record;
                                materialy = records.ToList();
                            }
                            double suma = 0;
                            for (int k = 0; k < materialy.Count; k++)
                            {
                                suma += Convert.ToInt32(materialy[k].Ilosc) * (Convert.ToDouble(materialy[k].Cena_netto) + Convert.ToDouble(materialy[k].Cena_netto) * (Convert.ToInt32(materialy[k].Vat)*0.01));
                            }
                            polarok[i].Zak_mat = Convert.ToString(Convert.ToDouble(polarok[i].Zak_mat) + suma);
                        }
                    }
                    for (int j = 0; j < innedok.Count; j++)
                    {
                        String[] data = koszty[j].Data.Split('-');
                        if (i + 1 == Convert.ToInt32(data[1]))
                        {
                            List<KosztInny> inne = new List<KosztInny>();
                            using (LINQtoDBDataContext db = new LINQtoDBDataContext())
                            {
                                var records = from record in db.KosztInnies
                                              where Convert.ToString(innedok[j].Id_dokumentu).Contains(Convert.ToString(record.DokumentInny.Id_dokumentu))
                                              select record;
                                inne = records.ToList();
                            }
                            for (int k = 0; k < inne.Count; k++)
                            {
                                if (inne[k].Typ.CompareTo("Sprzedane usługi") == 0)
                                    polarok[i].Sprz_usl = Convert.ToString(Convert.ToDouble(polarok[i].Sprz_usl) + Convert.ToDouble(inne[k].Kwota));
                                if (inne[k].Typ.CompareTo("Pozostałe przychody") == 0)
                                    polarok[i].Poz_prz = Convert.ToString(Convert.ToDouble(polarok[i].Poz_prz) + Convert.ToDouble(inne[k].Kwota));
                                if (inne[k].Typ.CompareTo("Zakup materiałów") == 0)
                                    polarok[i].Zak_mat = Convert.ToString(Convert.ToDouble(polarok[i].Zak_mat) + Convert.ToDouble(inne[k].Kwota));
                                if (inne[k].Typ.CompareTo("Koszty uboczne") == 0)
                                    polarok[i].Kosz_ub = Convert.ToString(Convert.ToDouble(polarok[i].Kosz_ub) + Convert.ToDouble(inne[k].Kwota));
                                if (inne[k].Typ.CompareTo("Koszty wynagrodzenia") == 0)
                                    polarok[i].Kosz_wyn = Convert.ToString(Convert.ToDouble(polarok[i].Kosz_wyn) + Convert.ToDouble(inne[k].Kwota));
                                if (inne[k].Typ.CompareTo("Pozostałe wydatki") == 0)
                                    polarok[i].Poz_wyd = Convert.ToString(Convert.ToDouble(polarok[i].Poz_wyd) + Convert.ToDouble(inne[k].Kwota));
                            }
                        }
                    }
                    polarok[i].Prz_raz = Convert.ToString(Convert.ToDouble(polarok[i].Sprz_usl) + Convert.ToDouble(polarok[i].Poz_prz));
                    polarok[i].Kosz_raz = Convert.ToString(Convert.ToDouble(polarok[i].Zak_mat) + Convert.ToDouble(polarok[i].Kosz_ub) + Convert.ToDouble(polarok[i].Kosz_wyn) + Convert.ToDouble(polarok[i].Poz_wyd));
                    r1 += Convert.ToDouble(polarok[i].Sprz_usl);
                    r2 += Convert.ToDouble(polarok[i].Poz_prz);
                    r3 += Convert.ToDouble(polarok[i].Prz_raz);
                    r4 += Convert.ToDouble(polarok[i].Zak_mat);
                    r5 += Convert.ToDouble(polarok[i].Kosz_ub);
                    r6 += Convert.ToDouble(polarok[i].Kosz_wyn);
                    r7 += Convert.ToDouble(polarok[i].Poz_wyd);
                    r8 += Convert.ToDouble(polarok[i].Kosz_raz);
                }
                ksiegaroczna.ItemsSource = polarok;
                sprz_usl.Text = Convert.ToString(r1);
                poz_prz.Text = Convert.ToString(r2);
                prz_razem.Text = Convert.ToString(r3);
                zak_mat.Text = Convert.ToString(r4);
                koszt_ub.Text = Convert.ToString(r5);
                koszt_wyn.Text = Convert.ToString(r6);
                poz_wyd.Text = Convert.ToString(r7);
                koszt_razem.Text = Convert.ToString(r8);
            }
        }

        private void Anuluj_Click(object sender, RoutedEventArgs e)
        {
            new Dokumenty(id_uzytkownika, imie_uzytkownika, nazwisko_uzytkownika, stanowisko_uzytkownika).Show();
            this.Close();
        }


    }
}
